<?php

class UsuarioDAL {
    
    public static function listar($oUsuario) {
        try {
            $arr = array(
                    "{#ID}" => $oUsuario->getId(),
                    "{#EMAIL}" => $oUsuario->getEmail(),
                    "{#NOMBRE}" => $oUsuario->getNombre(),
                    "{#APELLIDO}" => $oUsuario->getApellido(),
                    "{#TELEFONO}" => $oUsuario->getTelefono(),
                    "{#TIPO}" => $oUsuario->getTipo(),
                    "{#PASSWORD}" => $oUsuario->getPassword(),
                    "{#IMAGEN}" => $oUsuario->getImagen(),
                    "{#ESTADO}" => $oUsuario->getEstado(),
                    "{#IDCENTRO}" => $oUsuario->getIdCentro(),
                    "{#NOMBRECENTRO}" => $oUsuario->getNombreCentro()
                );
            $query = Util::getQuery($arr, UsuarioSQL::$LISTAR);

            $arrDatos = Bd::exec($query);
            $arrUsuario = array();

            if (count($arrDatos) > 0) {
                foreach ($arrDatos as $row) {
                    $oUsuario = new Usuario();
                    
                    $oUsuario->setId(is_null($row["id"]) ? 0 : $row["id"]);
                    $oUsuario->setEmail(is_null($row["email"]) ? "" : $row["email"]);
                    $oUsuario->setNombre(is_null($row["nombre"]) ? "" : $row["nombre"]);
                    $oUsuario->setApellido(is_null($row["apellido"]) ? "" : $row["apellido"]);
                    $oUsuario->setTipo(is_null($row["tipo"]) ? 0 : $row["tipo"]); 
                    if($oUsuario->getTipo() == 1){
                        $oUsuario->setTipo("Administrador");
                    }else if($oUsuario->getTipo() == 2){
                        $oUsuario->setTipo("Telefonista");
                    }else if($oUsuario->getTipo() == 3){
                        $oUsuario->setTipo("Nutricionista");
                    }
                    $oUsuario->setTelefono(is_null($row["telefono"]) ? "" : $row["telefono"]);
                    $oUsuario->setImagen(is_null($row["imagen"]) ? "" : $row["imagen"]);
                    $oUsuario->setIdCentro(is_null($row["idCentro"]) ? 0 : $row["idCentro"]);
                    $oUsuario->setNombreCentro(is_null($row["nombreCentro"]) ? "" : $row["nombreCentro"]);
                    if($oUsuario->getIdCentro() == 0){
                        $oUsuario->setNombreCentro("Centro no asociado");
                    }
                    $arrUsuario[] = $oUsuario;
                }
            }

            return $arrUsuario;
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    public static function listarPorTipo($oUsuario, $idCentro) {
        try {
            $arr = array("{#TIPO}" => $oUsuario->getTipo(),
                "{#ID_CENTRO}" => $idCentro);
            $query = Util::getQuery($arr, UsuarioSQL::$LISTAR_POR_TIPO);

            $arrDatos = Bd::exec($query);
            $arrUsuario = array();

            if (count($arrDatos) > 0) {
                foreach ($arrDatos as $row) {
                    $oUsuario = new Usuario();
                    
                    $oUsuario->setId(is_null($row["id"]) ? 0 : $row["id"]);
                    $oUsuario->setEmail(is_null($row["email"]) ? "" : $row["email"]);
                    $oUsuario->setNombre(is_null($row["nombre"]) ? "" : $row["nombre"]);
                    $oUsuario->setApellido(is_null($row["apellido"]) ? "" : $row["apellido"]);
                    $oUsuario->setTipo(is_null($row["tipo"]) ? 0 : $row["tipo"]); 
                    $oUsuario->setTelefono(is_null($row["telefono"]) ? "" : $row["telefono"]);
                    $oUsuario->setImagen(is_null($row["imagen"]) ? "" : $row["imagen"]);
                    $oUsuario->setNombreInicial(is_null($row["nombreInicial"]) ? "" : $row["nombreInicial"]);
                    $arrUsuario[] = $oUsuario;
                }
            }

            return $arrUsuario;
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function grabar($oUsuario) {
        try {

        $arr = array(
                    "{#EMAIL}" => $oUsuario->getEmail(),
                    "{#NOMBRE}" => $oUsuario->getNombre(),
                    "{#APELLIDO}" => $oUsuario->getApellido(),
                    "{#TELEFONO}" => $oUsuario->getTelefono(),
                    "{#TIPO}" => $oUsuario->getTipo(),
                    "{#IMAGEN}" => $oUsuario->getImagen(),
                    "{#PASSWORD}" => $oUsuario->getPassword(),
                    "{#ESTADO}" => $oUsuario->getEstado()
                );
            $query = Util::getQuery($arr, UsuarioSQL::$GRABAR);
            $arrDatos = Bd::exec($query);
            
            $id = Bd::$IDENTITY;
            return $id;
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }
    
    public static function editar($oUsuario) {
        try {
            $arr = array(
                    "{#ID}" => $oUsuario->getId(),
                    "{#EMAIL}" => $oUsuario->getEmail(),
                    "{#NOMBRE}" => $oUsuario->getNombre(),
                    "{#APELLIDO}" => $oUsuario->getApellido(),
                    "{#TELEFONO}" => $oUsuario->getTelefono(),
                    "{#TIPO}" => $oUsuario->getTipo(),
                    "{#IMAGEN}" => $oUsuario->getImagen(),
                    "{#PASSWORD}" => $oUsuario->getPassword(),
                    "{#ESTADO}" => $oUsuario->getEstado()
            );
            $query = Util::getQuery($arr, UsuarioSQL::$EDITAR_USUARIO);
            $arrDatos = Bd::exec($query);
            
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function eliminar($id) {
        try {
            $arr = array("{#ID}" => $id);
            $query = Util::getQuery($arr, UsuarioSQL::$ELIMINAR);
            $arrDatos = Bd::exec($query);
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function validarUsuario($oUsuario) {
        try {

            $arr = array(
                    "{#EMAIL}" => $oUsuario->getEmail(),
                    "{#PASSWORD}" => $oUsuario->getPassword()
                );

            $query = Util::getQuery($arr, UsuarioSQL::$VALIDAR_USUARIO);
            $arrDatos = Bd::exec($query);

            if (count($arrDatos) > 0) {
                $oUsuarioValido = new Usuario();

                foreach ($arrDatos as $fila) {
                    $oUsuarioValido->setId($fila["id"]);
                    $oUsuarioValido->setEmail($fila["email"]);
                    $oUsuarioValido->setNombre($fila["nombre"]);
                    $oUsuarioValido->setApellido($fila["apellido"]);
                    $oUsuarioValido->setTipo($fila["tipo"]);
                    $oUsuarioValido->setPassword($fila["password"]);
                    $oUsuarioValido->setEstado($fila["estado"]);
                    $oUsuarioValido->setTelefono($fila["telefono"]);
                    $oUsuario->setImagen($fila["imagen"]);
                }
                return $oUsuarioValido;
            } else {
                return null;
            }
        } catch (Exception $e) {
            Util::logFile(Util::MENSAJE_ERROR, $e->getMessage());
            return null;
        }
    }
    
    public static function obtenerPorId($id){
        try{
            
            $arr = array("{#ID}" => $id);
            $query = Util::getQuery($arr, UsuarioSQL::$OBTENER_POR_ID);
            $arrDatos = Bd::exec($query);
            
            if(count($arrDatos) > 0){
                $oUsuario = new Usuario();
                
                foreach ($arrDatos as $row){
                    $oUsuario->setId(is_null($row["id"]) ? 0 : $row["id"]);
                    $oUsuario->setEmail(is_null($row["email"]) ? "" : $row["email"]);
                    $oUsuario->setNombre(is_null($row["nombre"]) ? "" : $row["nombre"]);
                    $oUsuario->setApellido(is_null($row["apellido"]) ? "" : $row["apellido"]);
                    $oUsuario->setTipo(is_null($row["tipo"]) ? 0 : $row["tipo"]); 
//                    if($oUsuario->getTipo() == 1){
//                        $oUsuario->setTipo("Administrador");
//                    }else if($oUsuario->getTipo() == 2){
//                        $oUsuario->setTipo("Telefonista");
//                    }else if($oUsuario->getTipo() == 3){
//                        $oUsuario->setTipo("Nutricionista");
//                    }
                    $oUsuario->setTelefono(is_null($row["telefono"]) ? "" : $row["telefono"]);
                    $oUsuario->setImagen(is_null($row["imagen"]) ? "" : $row["imagen"]);
                }
                return $oUsuario;
            }
        }  catch (Exception $e){
            throw new Exception($e->getMessage());
        }
    }
}
?>

